placesview: plug some memory leaks
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Tue, 28 Jul 2015 09:51:14 +0000 (06:51 -0300)
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Tue, 28 Jul 2015 10:03:09 +0000 (07:03 -0300)
The GFile containing the Computer item was not
properly dereferenced, so plug that leak by both
dereferencing it and adding some reference management
on GtkPlacesViewRow.

gtk/gtkplacesview.c
gtk/gtkplacesviewrow.c

index b685b855ee21e874977977d260a81dfbb1b03633..628376ee5efa50e2e000027e3d1ce54198cb7c1c 100644 (file)
@@ -874,6 +874,9 @@ add_computer (GtkPlacesView *view)
                       NULL);
 
   insert_row (view, row, FALSE);
+
+  g_object_unref (icon);
+  g_object_unref (file);
 }
 
 static void
index 97ce9b67c773133a74ced5f30ba58b638d34c2b2..89f20527ebcc79266b721b70200974a41c618283 100644 (file)
@@ -56,6 +56,16 @@ enum {
 
 static GParamSpec *properties [LAST_PROP];
 
+static void
+gtk_places_view_row_finalize (GObject *object)
+{
+  GtkPlacesViewRow *self = GTK_PLACES_VIEW_ROW (object);
+
+  g_clear_object (&self->volume);
+  g_clear_object (&self->mount);
+  g_clear_object (&self->file);
+}
+
 static void
 gtk_places_view_row_get_property (GObject    *object,
                                   guint       prop_id,
@@ -125,16 +135,16 @@ gtk_places_view_row_set_property (GObject      *object,
       break;
 
     case PROP_VOLUME:
-      self->volume = g_value_get_object (value);
+      g_set_object (&self->volume, g_value_get_object (value));
       break;
 
     case PROP_MOUNT:
-      self->mount = g_value_get_object (value);
+      g_set_object (&self->mount, g_value_get_object (value));
       gtk_widget_set_visible (GTK_WIDGET (self->eject_button), self->mount != NULL);
       break;
 
     case PROP_FILE:
-      self->file = g_value_get_object (value);
+      g_set_object (&self->file, g_value_get_object (value));
       break;
 
     default:
@@ -148,6 +158,7 @@ gtk_places_view_row_class_init (GtkPlacesViewRowClass *klass)
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
+  object_class->finalize = gtk_places_view_row_finalize;
   object_class->get_property = gtk_places_view_row_get_property;
   object_class->set_property = gtk_places_view_row_set_property;